iT邦幫忙

2024 iThome 鐵人賽

DAY 15
1
Mobile Development

用最接近自然語言的Basic30天學會行動App系列 第 15

Basic30天學會行動App-第15章.學習網路服務連接

  • 分享至 

  • xImage
  •  

第15章: 學習網路服務連接

隨著現代行動應用程式越來越依賴於網路服務,學習如何處理網路連接已成為開發者的基本技能之一。無論是向伺服器發送請求、處理回應資料,還是與第三方 Web API 互動,這些操作都需要開發者掌握網路連接的基礎知識。本章將探討如何在 B4X 平台上實現網路請求與回應、處理 JSON 資料,以及使用 Web API。

網路服務請求與回應

網路請求是應用程式與遠端伺服器溝通的主要方式。在行動應用程式開發中,最常見的網路請求方法包括 GET 和 POST 請求。GET 請求通常用於獲取資料,而 POST 請求則用於提交資料或執行伺服器操作。

  1. 發送GET請求
    GET 請求是最基本的網路請求方法,用於從伺服器檢索資料。在 B4A 中,你可以使用 HttpJob 來發送 GET 請求。
Sub SendGetRequest
    Dim job As HttpJob
    job.Initialize("Job1", Me)
    job.Download("https://api.example.com/data")
End Sub

Sub JobDone (Job As HttpJob)
    If Job.Success Then
        Log("Response: " & Job.GetString)
    Else
        Log("Error: " & Job.ErrorMessage)
    End If
    Job.Release
End Sub

在這個範例中,我們向一個假設的 API 發送 GET 請求,並在 JobDone 回呼函數中處理伺服器回應。如果請求成功,將會記錄回應資料,否則記錄錯誤訊息。
2. 發送POST請求
POST 請求通常用於向伺服器提交資料,或觸發伺服器端的操作。B4A 也支持通過 HttpJob 來發送 POST 請求。

Sub SendPostRequest
    Dim job As HttpJob
    job.Initialize("Job2", Me)
    job.PostString("https://api.example.com/submit", "param1=value1&param2=value2")
End Sub

Sub JobDone (Job As HttpJob)
    If Job.Success Then
        Log("Response: " & Job.GetString)
    Else
        Log("Error: " & Job.ErrorMessage)
    End If
    Job.Release
End Sub

這個範例展示了如何通過 POST 方法將參數提交到伺服器,並在回應中處理伺服器返回的結果。

處理服務JSON資料

JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,廣泛應用於網路通信中。大多數 Web API 的回應資料都以 JSON 格式返回,因此學會如何解析 JSON 資料是開發者的必備技能。

  1. 解析JSON資料
    B4A 提供了方便的 JSONParser 類別來解析 JSON 資料。以下是一個範例,展示如何解析 JSON 格式的回應資料。
Sub ParseJsonResponse(json As String)
    Dim parser As JSONParser
    parser.Initialize(json)
    Dim root As Map = parser.NextObject
    Dim name As String = root.Get("name")
    Dim age As Int = root.Get("age")
    
    Log("Name: " & name & ", Age: " & age)
End Sub

Sub JobDone (Job As HttpJob)
    If Job.Success Then
        ParseJsonResponse(Job.GetString)
    Else
        Log("Error: " & Job.ErrorMessage)
    End If
    Job.Release
End Sub

在這個範例中,我們首先將 JSON 字串傳入 JSONParser,然後使用 NextObject 方法將其解析為一個 Map 對象。接著,我們可以從 Map 中提取所需的資料。
2. 處理JSON陣列
有時候,伺服器回應可能包含一個 JSON 陣列。在這種情況下,你需要使用 NextArray 方法來處理。

Sub ParseJsonArray(json As String)
    Dim parser As JSONParser
    parser.Initialize(json)
    Dim root As List = parser.NextArray
    For Each item As Map In root
        Dim id As Int = item.Get("id")
        Dim value As String = item.Get("value")
        Log("ID: " & id & ", Value: " & value)
    Next
End Sub

在這個範例中,我們解析了一個 JSON 陣列,並迭代每個陣列項目來提取資料。

使用Web API服務

Web API 是應用程式與伺服器之間進行資料交換的橋樑。使用 Web API 可以讓應用程式訪問各種網路服務,例如地圖服務、社交媒體整合、天氣預報等。

  1. 認識Web API
    Web API 通常基於 HTTP 協議,並且以 RESTful 風格實現。這意味著 API 的每個端點對應一個特定的資源,開發者可以通過不同的 HTTP 方法(如 GET、POST、PUT、DELETE)來操作這些資源。
  2. 範例:使用天氣API
    以下是一個範例,展示如何使用 Web API 來獲取天氣資料。
Sub GetWeather(city As String)
    Dim job As HttpJob
    job.Initialize("WeatherJob", Me)
    job.Download("https://api.openweathermap.org/data/2.5/weather?q=" & city & "&appid=YOUR_API_KEY")
End Sub

Sub JobDone (Job As HttpJob)
    If Job.Success Then
        Dim parser As JSONParser
        parser.Initialize(Job.GetString)
        Dim root As Map = parser.NextObject
        Dim main As Map = root.Get("main")
        Dim temperature As Double = main.Get("temp")
        
        Log("Temperature: " & temperature)
    Else
        Log("Error: " & Job.ErrorMessage)
    End If
    Job.Release
End Sub

在這個範例中,我們使用 OpenWeatherMap API 來獲取指定城市的天氣資料。首先,我們構建 API 的請求 URL,然後發送 GET 請求。回應的 JSON 資料將會被解析,並從中提取出溫度資訊。
3. 處理API認證
有些 Web API 需要進行認證,這通常通過 API 密鑰或 OAuth 令牌來實現。在請求中添加適當的認證資訊至關重要。

Sub GetSecureData
    Dim job As HttpJob
    job.Initialize("SecureJob", Me)
    job.Download("https://api.example.com/securedata?apikey=YOUR_API_KEY")
End Sub

這段程式碼展示了如何將 API 密鑰附加到請求 URL 中,以便訪問受保護的資料。

範例程式:應用網路服務連接技術

以下是一個綜合範例,展示了如何發送網路請求、解析 JSON 資料,並與 Web API 進行互動。

Sub Process_Globals
    ' 全域變數
End Sub

Sub Globals
    Dim btnFetchData As Button
    Dim lblResult As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("MainLayout")
    
    btnFetchData.Initialize("btnFetchData")
    btnFetchData.Text = "Fetch Data"
    Activity.AddView(btnFetchData, 50, 50, 200, 50)
    
    lblResult.Initialize("")
    lblResult.Text = ""
    Activity.AddView(lblResult, 50, 150, 300, 200)
End Sub

Sub btnFetchData_Click
    ' 發送GET請求
    SendGetRequest
End Sub

Sub SendGetRequest
    Dim job As HttpJob
    job.Initialize("Job1", Me)
    job.Download("https://api.example.com/data")
End Sub

Sub JobDone (Job As HttpJob)
    If Job.Success Then
        Dim result As String = ParseJsonResponse(Job.GetString)
        lblResult.Text = "Data: " & result
    Else
        lblResult.Text = "Error: " & Job.ErrorMessage
    End If
    Job.Release
End Sub

Sub ParseJsonResponse(json As String) As String
    Dim parser As JSONParser
    parser.Initialize(json)
    Dim root As Map = parser.NextObject
    Return root.Get("value")
End Sub

這個範例展示了一個完整的工作流程:使用者點擊按鈕後,應用程式發送網路請求,接收並解析伺服器回應的 JSON資料,然後將結果顯示在應用程式的介面上。這種結構化的方法能夠幫助開發者更好地處理網路請求與回應,並與 Web API 進行有效的互動。
範例分析與擴展
這個範例展示了如何將網路請求整合到應用程式的工作流程中,並將解析後的資料更新至 UI 元件。這是一種常見的設計模式,適用於各種情境,如從伺服器獲取最新的新聞、天氣資料、使用者資訊等。

擴展功能

1. 錯誤處理與回應狀態碼: 在實際應用中,除了處理正常的回應,你還需要對不同的 HTTP 狀態碼進行處理。例如,當伺服器返回 404 時,應用程式應該顯示一個錯誤訊息或提示使用者資料未找到。
2. 使用回呼函數優化非同步操作: 在處理網路請求時,將回呼函數與非同步操作結合使用,可以使程式碼結構更清晰。例如,可以在成功獲取資料後自動觸發後續的資料處理流程,而無需在主程式碼中進行繁瑣的控制。
3. 緩存資料以提升效能: 在需要頻繁訪問的 API 或資料情境中,實現資料的本地緩存可以有效降低網路請求的頻率,提升應用程式的效能。你可以使用 SharedPreferences 或 SQLite 資料庫來存儲緩存資料,並在必要時更新。
4. 動態請求URL與參數: 在範例中,請求 URL 是靜態的,但在實際應用中,你可能需要根據使用者輸入或應用程式狀態來動態生成請求 URL 或參數。例如,可以根據使用者的選擇來請求不同城市的天氣資料。

結論

掌握網路請求與回應的基礎知識,能夠讓你在開發行動應用程式時,更好地與伺服器進行互動,並且能夠處理來自 Web API 的資料。通過學習如何解析 JSON 資料、處理非同步網路操作以及與 Web API 進行互動,你可以構建功能豐富且反應快速的應用程式,為使用者提供出色的體驗。在後續的章節中,我們將進一步探討更高階的網路功能,例如即時資料更新、WebSocket 通訊等,幫助你打造更強大的行動應用程式。

參考網址
https://www.b4x.com/teach.html
https://www.b4x.com/learn.html


上一篇
Basic30天學會行動App-第14章.處理背景執行緒與非同步操作
下一篇
Basic30天學會行動App-第16章.實作天氣預報App
系列文
用最接近自然語言的Basic30天學會行動App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言